package com.hui.account.utils;

import android.annotation.SuppressLint;
import android.util.Log;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class FileUtils {

    /**
     * 将字符串写入到文本文件中
     */
    @SuppressLint("LongLogTag")
    public static boolean writeTxtToFile(String content, String filePath, String fileName) {
        // 1、创建文件
        makeFile(filePath, fileName);

        // 2、文件路径
        filePath = filePath + fileName;

        try {
            File file = new File(filePath);
            if (!file.exists()) {
                file.getParentFile().mkdirs();
                file.createNewFile();
            }
            RandomAccessFile mRandomAccessFile = new RandomAccessFile(file, "rwd");
            mRandomAccessFile.seek(file.length());
            mRandomAccessFile.write(content.getBytes());
            mRandomAccessFile.close();
            return true;
        } catch (Exception e) {
            Log.e(CommonUtils.TAG, "===> 【FileUtils】 writeTxtToFile 异常信息:" + e.getMessage());
            return false;
        }
    }

    /**
     * 生成文件
     */
    @SuppressLint("LongLogTag")
    public static void makeFile(String filePath, String fileName) {
        makeDirectory(filePath);
        try {
            File file = new File(filePath + fileName);
            if (!file.exists()) {
                file.createNewFile();
            }

        } catch (Exception e) {
            Log.e(CommonUtils.TAG, "===> 【FileUtils】 makeFile 异常信息:" + e.getMessage());
        }
    }

    /**
     * 生成文件夹
     */
    @SuppressLint("LongLogTag")
    public static void makeDirectory(String filePath) {
        try {
            File file = new File(filePath);
            if (!file.exists()) {
                file.mkdir();
            }
        } catch (Exception e) {
            Log.e(CommonUtils.TAG, "===> 【FileUtils】 makeDirectory 异常信息:" + e.getMessage());
        }
    }

    /**
     * 获取文件夹中所有文件（指定文件）
     */
    public static List<File> getListFiles(File file) {
        List<File> files = new ArrayList<>();
        if (file.exists() && file.isDirectory()) {
            File[] fileArr = file.listFiles();
            if (null != fileArr) {
                Collections.addAll(files, fileArr);
            }
        }
        return files;
    }

    /**
     * 字节转 KB/MB/GB 保留两位小数四舍五入
     */
    public static String transferFileSize(Long size) {
        double length = Double.valueOf(String.valueOf(size));
        //如果字节数少于1024，则直接以B为单位，否则先除于1024，后3位因太少无意义
        if (length < 1024) {
            return length + "B";
        } else {
            length = length / 1024.0;
        }
        //如果原字节数除于1024之后，少于1024，则可以直接以KB作为单位
        if (length < 1024) {
            return Math.round(length * 100) / 100.0 + "KB";
        } else {
            length = length / 1024.0;
        }
        if (length < 1024) {
            //因为如果以MB为单位的话，要保留最后1位小数，因此，把此数乘以100之后再取余
            return Math.round(length * 100) / 100.0 + "MB";
        } else {
            //否则如果要以GB为单位的，先除于1024再作同样的处理
            return Math.round(length / 1024 * 100) / 100.0 + "GB";
        }
    }
}
